package com.cy.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cy.entity.Message;
import com.baomidou.mybatisplus.extension.service.IService;

import javax.print.DocFlavor;
import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author cy
 * @since 2021-11-08
 */
public interface MessageService extends IService<Message> {

    /**
     * 查询当前用户的会话列表,针对每个会话只返回一个最新的私信
     * @param userId
     * @param page
     * @return
     */
    IPage<Message> selectConversations(Integer userId, Page<Message> page);


    /**
     * 查询当前用户的会话数量
     * @param userId
     * @return
     */
    Integer selectConversationCount(Integer userId);


    /**
     * 查询某个会话所包含的私信列表
     * @param conversationId
     * @param page
     * @return
     */
    IPage<Message> selectLetters(String conversationId,Page<Message> page);

    /**
     * 查询某个会话所包含的私信数量
     * @param conversationId
     * @return
     */
    Integer selectLettersCount(String conversationId);

    /**
     * 查询未读私信的数量，如果不传conversationId则表示用户总的未读
     * 私信数量，如果传conversationId则表示某个用户某个会话的具体私信数量
     * @param userId
     * @param conversationId
     * @return
     */
    Integer selectLettersCountUnreadCount(Integer userId, String conversationId);


    Integer addMessage(Message message);


    Integer readMessage(List<Integer> ids);


    // 查询某个主题下最新的通知
    Message selectLatestNotice(int userId, String topic);

    // 查询某个主题所包含的通知数量
    int selectNoticeCount(int userId, String topic);

    // 查询未读的通知的数量
    int selectNoticeUnreadCount(int userId, String topic);

    // 查询某个主题所包含的通知列表
    List<Message> selectNotices(int userId, String topic, int offset, int limit);
}
